#include<stdio.h>
#include<malloc.h>
#define MaxSize 50
typedef char ElemType;
char w;
typedef struct
{
   	ElemType data[MaxSize];
	int top;
}SqStack;
void InitStack(SqStack* &s)
{
	s=(SqStack*)malloc(sizeof(SqStack));
	s->top=-1;
}
bool StackEmpty(SqStack*s)
{
	return(s->top==-1);
}
bool Push(SqStack* &s,ElemType e)
{
	if(s->top==MaxSize-1)
		return false;
	s->top++;
	s->data[s->top]=e;
	return true;
}


bool Pop(SqStack* &s,ElemType &e)
{
	if(s->top==-1)
		return false;
	e=s->data[s->top];
	s->top--;
	return true;
}
 

void DestroyStack(SqStack* &s)
{
	free(s);
}
 

int main()
{
	SqStack *s;
	printf("顺序栈的各种基本运算的算法: \n");
 
	printf("(1)初始化栈s  \n");
	InitStack(s);
	
	printf("(2)判断栈s是否非空: %s\n",(StackEmpty(s)?"空":"非空"));
 
	printf("(3)依次进栈元素a、b、c、d、e \n");
	Push(s,'a');
	Push(s,'b');
	Push(s,'c');
	Push(s,'d');
	Push(s,'e');
 
	printf("(4)判断栈s是否非空: %s\n",(StackEmpty(s)?"空":"非空"));
 
	printf("(5)输出出栈序列:  ");
    while(!StackEmpty(s))
	{
        Pop(s,w);
		printf("%c",w);
	}
	printf("\n");
 
	printf("(6)判断栈s是否非空: %s\n",(StackEmpty(s)?"空":"非空"));
 
	printf("(7)释放栈 \n");
	DestroyStack(s);
	return 0;
}
